In a variety of consumer electronics, solid state drives are more and more frequently replacing conventional rotating hard disk drives for mass storage. These solid state drives may include one or more flash memory devices, the flash memory devices may be logically divided into blocks, and each of the blocks may be further logically divided into addressable pages. These addressable pages may be any of a variety of sizes (e.g., 512 Byte, 1 Kilobyte, 2 Kilobytes, 4 Kilobytes), which may or may not match the logical block address sizes used by a host computing device.
During a write operation, data may be written to the individual addressable pages in a block of a flash memory device. However, in order to erase or rewrite a page, an entire block must typically be erased. Of course, different blocks in each flash memory device may be erased more or less frequently depending upon the data stored therein. Thus, since the lifetime of storage cells of a flash memory device correlates with the number of erase cycles, many solid state drives perform wear-leveling operations (both static and dynamic) in order to spread erasures more evenly over all of the blocks of a flash memory device.
During a static wear-leveling operation, data in a source block that has been relatively infrequently erased may be moved to a target block, such that new data may be recorded to the source block, which may then be erased more frequently. Unfortunately, in conventional solid state drives, if power is lost during the static wear-leveling operation, data being moved from the source block to the target block may be lost. In some solid state drives, this data loss may be unrecoverable. In other solid state drives, the data may remain in the source block, but the entire move operation must be started from the beginning if the solid state drive experiences a power failure.
There is therefore a need in the art to improve wear-leveling operations in solid state drives.